package com.hlhj.carview.presenter

import android.content.Context
import com.baidu.location.BDAbstractLocationListener
import com.baidu.location.BDLocation
import com.baidu.location.LocationClient
import com.baidu.location.LocationClientOption
import com.example.mymvp.log
import com.example.mymvp.mvp.BasePresenter
import com.google.gson.Gson
import com.hlhj.carview.Constant
import com.hlhj.carview.Iview.MainView
import com.hlhj.carview.bean.WeatherBean
import com.hlhj.carview.module.MainModule


/**
 * Created by Never Fear   on 2018\12\20 0020.
Never More....
 */
class MainPresenter :BasePresenter<MainModule,MainView>(), MainView {

    override fun setWeather(weatherBean: WeatherBean) {
        view?.setWeather(weatherBean)
    }
    var c:Context?=null
    override fun createModule() {
        module=MainModule()
        module?.lis=this
    }

    /*定位*/
    var mlocationClient: LocationClient? = null
    private var locationOption: LocationClientOption?=null

    fun initLocation(c:Context){
        mlocationClient= LocationClient(c)

        mlocationClient?.registerLocationListener(MyLocationListener())
        locationOption= LocationClientOption()

        //可选，默认高精度，设置定位模式，高精度，低功耗，仅设备
        locationOption?.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
//可选，默认gcj02，设置返回的定位结果坐标系，如果配合百度地图使用，建议设置为bd09ll;
        locationOption?.setCoorType("gcj02");
//可选，默认0，即仅定位一次，设置发起连续定位请求的间隔需要大于等于1000ms才是有效的
        locationOption?.setScanSpan(1000);
//可选，设置是否需要地址信息，默认不需要
        locationOption?.setIsNeedAddress(true);
//可选，设置是否需要地址描述
        locationOption?.setIsNeedLocationDescribe(true);
//可选，设置是否需要设备方向结果
        locationOption?.setNeedDeviceDirect(false);
//可选，默认false，设置是否当gps有效时按照1S1次频率输出GPS结果
        locationOption?.setLocationNotify(true);
//可选，默认true，定位SDK内部是一个SERVICE，并放到了独立进程，设置是否在stop的时候杀死这个进程，默认不杀死
        locationOption?.setIgnoreKillProcess(true);
//可选，默认false，设置是否需要位置语义化结果，可以在BDLocation.getLocationDescribe里得到，结果类似于“在北京天安门附近”
        locationOption?.setIsNeedLocationDescribe(true);
//可选，默认false，设置是否需要POI结果，可以在BDLocation.getPoiList里得到
        locationOption?.setIsNeedLocationPoiList(true);
//可选，默认false，设置是否收集CRASH信息，默认收集
        locationOption?.SetIgnoreCacheException(false);
//可选，默认false，设置是否开启Gps定位
        locationOption?.setOpenGps(true);
//可选，默认false，设置定位时是否需要海拔信息，默认不需要，除基础定位版本都可用
        locationOption?.setIsNeedAltitude(false);
//设置打开自动回调位置模式，该开关打开后，期间只要定位SDK检测到位置变化就会主动回调给开发者，该模式下开发者无需再关心定位间隔是多少，定位SDK本身发现位置变化就会及时回调给开发者
        locationOption?.setOpenAutoNotifyMode();
//设置打开自动回调位置模式，该开关打开后，期间只要定位SDK检测到位置变化就会主动回调给开发者
        locationOption?.setOpenAutoNotifyMode(3000,1, LocationClientOption.LOC_SENSITIVITY_HIGHT);
//需将配置好的LocationClientOption对象，通过setLocOption方法传递给LocationClient对象使用
        mlocationClient?.setLocOption(locationOption);
//开始定位
        mlocationClient?.start();

    }
    companion object {
        var mlat:Double?=null
        var mlong:Double?=null
    }

   inner  class MyLocationListener : BDAbstractLocationListener() {
        override fun onReceiveLocation(location: BDLocation) {
            //此处的BDLocation为定位结果信息类，通过它的各种get方法可获取定位相关的全部结果
            //以下只列举部分获取地址相关的结果信息
            //更多结果信息获取说明，请参照类参考中BDLocation类中的说明
            val addr = location.addrStr //获取详细地址信息
            val country = location.country //获取国家
            val province = location.province //获取省份
            val city = location.city //获取城市
            val district = location.district //获取区县
            val street = location.street //获取街道信息
            val adcode = location.adCode //获取adcode
            val town = location.town //获取乡镇信息

            Constant.city=location.city
            view?.getWeather()
            view?.setLocation(location)

        }
    }
    override fun getWeather() {
        view?.getWeather()
    }

    fun getLoc(city:String){

    }
}